package toOffer;

/**
 * <h3>toOffer</h3>
 *
 * @author YuanAo
 * @date 2024/6/12 14:49
 * @description <p>有效的电话号码</p>
 */

import java.io.*;

/**
 * 题目：给定一个包含电话号码列表（一行一个电话号码）的文本文件 file.txt，写一个单行 bash 脚本输出所有有效的电话号码。
 *
 * 你可以假设一个有效的电话号码必须满足以下两种格式： (xxx) xxx-xxxx 或 xxx-xxx-xxxx。（x 表示一个数字）
 *
 * 你也可以假设每行前后没有多余的空格字符。
 *
 * 示例：
 *
 * 假设 file.txt 内容如下：
 *
 * 987-123-4567
 * 123 456 7890
 * (123) 456-7890
 * 你的脚本应当输出下列有效的电话号码：
 *
 * 987-123-4567
 * (123) 456-7890
 */
public class No193 {
    public static void main(String[] args) {
        File file = new File("D:/1.txt");
        fun(file);
    }

    /**
     * 傻卵题
     * @param file
     */
    public static void fun(File file) {
        try {
            FileInputStream fileInputStream = new FileInputStream(file);
            BufferedReader bf = new BufferedReader(new InputStreamReader(fileInputStream));

            String temp = null;
            // 循环遍历一行一行读取数据
            while ((temp = bf.readLine()) != null) {
                temp = fun1(temp);
                if (!temp.equals("")) System.out.println(temp);
            }

        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    private static String fun1(String str) {
        if (str.length() != 12 && str.length() != 14) {
            return "";
        }

        // 分情况讨论
        if (str.charAt(0) == '(' && str.charAt(4) == ')'){
            str = (fun2(str.substring(1, 4), 0)
                    && fun2(str.substring(6, 9), 1)
                    && fun2(str.substring(10), 2)
                    && "-".equals(str.substring(9, 10))) ? str : "";
        }else {
            String[] strs = str.split("-");
            if (strs.length != 3) return "";
            str = ( fun2(strs[0], 0) && fun2(strs[1], 1) && fun2(strs[2], 2)? str : "");
        }
        return str;
    }

    private static boolean fun2(String str, int i){
        char[] chars = str.toCharArray();
        if (i == 0 || i == 1){
            if (str.length() != 3) return false;
            for (char c : chars) {
                if (c > '9' || c < '0'){
                    return false;
                }
            }
        }
        if (i == 2){
            if (str.length() != 4) return false;
            for (char c : chars) {
                if (c > '9' || c < '0'){
                    return false;
                }
            }
        }
        return true;
    }

}
